﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using HtmlAgilityPack;

public class WebScraper
{
    private HttpClient _httpClient;  // HttpClient实例，用于发送HTTP请求
    private HtmlDocument _htmlDoc;   // HtmlDocument实例，用于解析HTML文档

    public WebScraper()
    {
        _httpClient = new HttpClient();
        _htmlDoc = new HtmlDocument();
    }

    // 异步方法，接收一个URL，返回该URL页面中找到的所有电话号码
    public async Task<IEnumerable<string>> ScrapePhoneNumbers(string url)
    {
        var phoneNumbers = new List<string>();  // 用于存储找到的电话号码

        var response = await _httpClient.GetAsync(url);  // 发送HTTP GET请求
        var pageContents = await response.Content.ReadAsStringAsync();  // 读取响应的内容

        _htmlDoc.LoadHtml(pageContents);  // 加载HTML文档

        // 定义一个正则表达式，用于匹配电话号码
        var phoneNumberRegex = new Regex(@"\b(1[3-9]\d{9})\b");
        var phoneMatches = phoneNumberRegex.Matches(pageContents);  // 在页面内容中搜索匹配项

        // 遍历所有匹配项，并添加到电话号码列表中
        foreach (Match match in phoneMatches)
        {
            phoneNumbers.Add(match.Value);
        }

        return phoneNumbers.Distinct();  // 返回去重后的电话号码列表
    }
    public static void Main(string[] args)
    {
        // 创建爬虫实例
        var scraper = new WebScraper();
        var url = "http://www.taohaoma.com/mobile/number";  // 替换为你想爬取的URL

        // 使用 Task.Run 运行异步任务
        Task.Run(async () =>
        {
            // 爬取电话号码
            var phoneNumbers = await scraper.ScrapePhoneNumbers(url);

            // 输出电话号码
            foreach (var phoneNumber in phoneNumbers)
            {
                Console.WriteLine(phoneNumber);
            }
        }).GetAwaiter().GetResult();  // 使用 GetAwaiter().GetResult() 来等待任务完成
    }
}


